package com.lin.tally;

import androidx.appcompat.app.AlertDialog;
import androidx.appcompat.app.AppCompatActivity;

import android.content.Context;
import android.content.DialogInterface;
import android.content.Intent;
import android.content.SharedPreferences;
import android.os.Bundle;
import android.text.method.HideReturnsTransformationMethod;
import android.text.method.PasswordTransformationMethod;
import android.view.View;
import android.widget.AdapterView;
import android.widget.Button;
import android.widget.ImageButton;
import android.widget.ImageView;
import android.widget.ListView;
import android.widget.TextView;

import com.lin.tally.adapter.AccountAdapter;
import com.lin.tally.db.AccoountBean;
import com.lin.tally.db.DBManager;
import com.lin.tally.utils.BudgetDialog;
import com.lin.tally.utils.MoreDialog;

import java.util.ArrayList;
import java.util.Calendar;
import java.util.List;

public class MainActivity extends AppCompatActivity implements View.OnClickListener {

    ListView todayLv;//显示今日收支情况的ListView
    ImageView searchIv;
    Button editBtn;
    ImageButton moreBtn;
    //声明数据源
    List<AccoountBean> mDatas;
    AccountAdapter adapter;
    int year,month,day;
    //头布局相关控件
    View headerView;
    TextView topOutTv,topInTv,topbudgetTv,topConTv;
    ImageView topShowIv;
    SharedPreferences preferences;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        initTime();
        initView();
        preferences=getSharedPreferences("budget", Context.MODE_PRIVATE);
        //添加ListView的头部局
        addLVHeaderView();
        mDatas=new ArrayList<>();
        //设置适配器：加载每一行数据的到列表中
       adapter= new AccountAdapter(this,mDatas);
       todayLv.setAdapter(adapter);
    }

    /**
     * 初始化自带的View的方法
     */
    private void initView() {
        todayLv=findViewById(R.id.main_lv);
        editBtn=findViewById(R.id.main_btn_edit);
        moreBtn=findViewById(R.id.main_btn_more);
        searchIv=findViewById(R.id.main_iv_search);
        editBtn.setOnClickListener(this);
        moreBtn.setOnClickListener(this);
        searchIv.setOnClickListener(this);
        setLVLongClickListener();
    }

    /**
     * 设置一下ListViewd的长按事件
     */
    private void setLVLongClickListener() {
        todayLv.setOnItemLongClickListener(new AdapterView.OnItemLongClickListener() {
            @Override
            public boolean onItemLongClick(AdapterView<?> parent, View view, int position, long id) {
                if(position==0){//点击了头布局
                    return false;
                }
                int pos=position-1;
                AccoountBean clickBean= mDatas.get(pos);//获取正在被点击的这条信息
                //弹出提示用户是否删除的对话框
                showDeleteItemDialog(clickBean);
                return false;
            }
        });
    }

    /**
     * 弹出是否删除用户删除的对话框
     */
    private void showDeleteItemDialog(AccoountBean clickBean) {
        AlertDialog.Builder builder= new AlertDialog.Builder(this);
        builder.setTitle("提示信息").setMessage("确实删除这条纪录吗？")
                .setNegativeButton("取消",null)
                .setPositiveButton("确定", new DialogInterface.OnClickListener() {
                    @Override
                    public void onClick(DialogInterface dialog, int which) {
                        int click_id=clickBean.getId();
                        //执行删除的操作
                        DBManager.deleteItemFromAccounttbById(click_id);
                        mDatas.remove(clickBean);//实时刷新，移除集合当中的对象
                        adapter.notifyDataSetChanged();//提示适配器实时更新数据
                        setTopTvShow(); //改变头布局TextView显示的内容
                    }
                });
        builder.create().show();//显示对话框
    }

    /**
     * 给ListView添加头布局的方法
     */
    private void addLVHeaderView() {
        //将布局转换成View对象
        headerView = getLayoutInflater().inflate(R.layout.item_mainly_top, null);
        todayLv.addHeaderView(headerView);
        //查找头布局可用控件
        topOutTv=headerView.findViewById(R.id.item_mainly_top_tv_out);
        topInTv=headerView.findViewById(R.id.item_mainly_top_tv_in);
        topbudgetTv=headerView.findViewById(R.id.item_mainly_top_tv_budget);
        topConTv=headerView.findViewById(R.id.item_mainly_top_tv_day);
        topShowIv=headerView.findViewById(R.id.item_mainly_top_iv_hide);

        topbudgetTv.setOnClickListener(this);
        headerView.setOnClickListener(this);
        topShowIv.setOnClickListener(this);
    }

    /**
     * 获取今日的具体时间
     */
    private void initTime() {
        Calendar calendar=Calendar.getInstance();
        year=calendar.get(Calendar.YEAR);
        month=calendar.get(Calendar.MONTH)+1;
        day=calendar.get(Calendar.DAY_OF_MONTH);
    }

    /**
     * 表示acticity获取焦点时，会调用的方法
     */
    @Override
    protected void onResume() {
        super.onResume();
        loadDBData();
        setTopTvShow();
    }

    /**
     * 设置头布局当中文本内容的显示
     */
    private void setTopTvShow() {
        //获取今日支出和收入总金额，显示在view当中
        float incomeOneDay=DBManager.getSumMoneyOneDay(year,month,day,1);
        float outcomeOneDay=DBManager.getSumMoneyOneDay(year,month,day,0);
        String infoOneDay="今日支出 ￥"+outcomeOneDay+"收入 ￥"+incomeOneDay;
        topConTv.setText(infoOneDay);
        //获取本月支出和收入总金额，显示在view当中
        float incomeOneMonth=DBManager.getSumMoneyOneMonth(year,month,1);
        float outcomeOneMonth=DBManager.getSumMoneyOneMonth(year,month,0);
        topInTv.setText("￥"+incomeOneMonth);
        topOutTv.setText("￥"+outcomeOneMonth);

        //设置显示运行剩余
        float bmoney= preferences.getFloat("bmoney",0);//预算
        if (bmoney==0){
            topbudgetTv.setText("￥ 0");
        }else {
            float syMoney=bmoney-outcomeOneMonth;//剩余余额
            topbudgetTv.setText("￥"+syMoney);
        }
    }

    private void loadDBData() {
       List<AccoountBean> list= DBManager.getAccountListOneDayFromAccounttb(year,month,day);
        mDatas.clear();
        mDatas.addAll(list);
        adapter.notifyDataSetChanged();//提示adapter更新
    }

    /**
     *
     */
    @Override
    public void onClick(View v) {
        switch (v.getId()) {
            case R.id.main_iv_search:
                Intent it= new Intent(this,SearchActivity.class);//跳转界面的操作
                startActivity(it);
                break;
            case R.id.main_btn_edit:
                Intent it1= new Intent(this,RecordActivity.class);//跳转界面的操作
                startActivity(it1);
                break;
            case R.id.main_btn_more:
               MoreDialog moreDialog= new MoreDialog(this);
               moreDialog.show();
               moreDialog.setDialogSize();//设置位置和尺寸
                break;
            case R.id.item_mainly_top_tv_budget:
                //显示对话框
                showBudgetDialof();
                break;
            case R.id.item_mainly_top_iv_hide:
                //切换TextView明文和密文
                toggleShow();
                break;
        }
        if (v==headerView) {
            //头布局被点击了
            Intent intent=new Intent();
            intent.setClass(this, MonthCharActivity.class);
            startActivity(intent);
        }
    }

    /**
     * 显示预算设置对话框
     */
    private void showBudgetDialof() {
        BudgetDialog dialog=new BudgetDialog(this);
        dialog.show();
        dialog.setDialogSize();//设置键盘尺寸
        dialog.setOnEnsureListener(new BudgetDialog.OnEnsureListener() {
            @Override
            public void onEnsure(float money) {
                //将运算金额写入到共享参数当中，进行存储
                SharedPreferences.Editor editor=preferences.edit();
                editor.putFloat("bmoney",money);
                editor.commit();

                //计算剩余金额
              float outcomeOneMonth = DBManager.getSumMoneyOneMonth(year,month,0);
              float syMoney=money-outcomeOneMonth;//预算剩余=预算-支出
                topbudgetTv.setText("￥"+syMoney);
            }
        });
    }

    boolean isShow=true;
    /**
     * 点击头布局眼睛时，如果原来是明文就加密，如果是密文就显示出来
     */
    private void toggleShow() {
        if (isShow) { //明文 ====>>密文
            PasswordTransformationMethod passwordMethod =PasswordTransformationMethod.getInstance();
            topInTv.setTransformationMethod(passwordMethod);//通过这个方法设置隐藏
            topOutTv.setTransformationMethod(passwordMethod);
            topbudgetTv.setTransformationMethod(passwordMethod);
            topShowIv.setImageResource(R.mipmap.ih_hide);
            isShow=false; //设置标志位为隐藏状态
        }else {     //密文 ====》》明文
            HideReturnsTransformationMethod hideReturnsMethod=HideReturnsTransformationMethod.getInstance();
            topInTv.setTransformationMethod(hideReturnsMethod);//通过这个方法设置隐藏
            topOutTv.setTransformationMethod(hideReturnsMethod);
            topbudgetTv.setTransformationMethod(hideReturnsMethod);
            topShowIv.setImageResource(R.mipmap.ih_show);
            isShow=true; //设置标志位为隐藏状态
        }
    }
}